在 Rust 中,陣列(array) 是一種固定大小的資料集合,元素必須是相同型別(homogenous)。
let numbers: [i32; 6] = [1, 5, 18, 33, 40, 42];
其中[i32; 6],i32是元素型別、6是元素個數,但是陣列的長度固定,無法動態增減。
let _currency_rates: [f64; 0] = [];
在Rust中,空陣列仍是合法型別,但仍需指定型別與長度
let mut seasons: [&str; 4] = ["Spring", "Summer", "Fall", "Winter"];//使用mut,陣列可修改元素值
println!("{}", seasons[2]); // 印出Fall
seasons[2] = "Autumn"; // 修改第 3 項
println!("{}", seasons[2]); // 印出Autumn
let seasons: [&str; 4] = ["Spring", "Summer", "Fall", "Winter"];
let first: &str = seasons[0];
let second: &str = seasons[1];
println!(
"The first season is {} and second season is {}.",
first, second);
可以使用索引取出元素並賦值給變數,陣列內元素為 &str,所以取出值型別為 &str。
在 Rust 中,Trait(特徵) 是一種「行為的契約」。
Trait 定義了一組方法,如果一個型別實作了這個 trait,就保證提供這些方法。
簡單理解:Trait 就像是能力說明書 ➔「能做這些事」的保證。
Display
trait 允許一個型別用「友善、乾淨的格式」呈現在畫面上。
{}
插值時會自動呼叫 Display
。Display
。fn main() {
println!("{}", 5); // 整數
println!("{}", 3.14); // 浮點數
println!("{}", true); // 布林值
}
這些型別因為有實作 Display,可以直接用 {} 格式化。
Debug trait 允許一個型別用「給開發者看的格式」印出資料。
用 {:?} 插值時會呼叫 Debug。
有些型別(例如陣列)預設只有 Debug,沒有 Display。
用於除錯、快速查看變數內容。
fn main() {
let seasons: [&str; 4] = ["Spring", "Summer", "Fall", "Winter"];
println!("{:?}", seasons); // 使用 Debug trait
}
如果你試圖用 {} 印出 seasons 陣列,會錯誤!因為陣列沒有實作 Display。
但 {:?} 可以成功,因為陣列有實作 Debug。
dbg! 是 Rust 內建的一個小工具,用來快速「印出變數內容」和「所在的程式位置」。
fn main() {
let seasons = ["Spring", "Summer", "Fall", "Winter"];
dbg!(2 + 2);
dbg!(seasons);
}
輸出類似:
[src/main.rs:6] 2 + 2 = 4
[src/main.rs:7] seasons = [
"Spring",
"Summer",
"Fall",
"Winter"
]
根據上述程式結果,它會告訴你現在在那個檔案,第幾行這樣。
這章節課程針對Trait的講解,分成入門和進階,現階段只要讓學習者先有概念,但我還是翻閱書籍和搜尋網路,發現Rust並沒有類別的概念,而是採用「Struct + Trait + impl」的方式來定義。
用白話的解釋:
Trait:
➔ 就是「規定」每個人必須9 點前到公司,但不管你怎麼到。
(只管方法的存在,不管內容)
Struct:
➔ 是「人」本身的資料,例如「小明,25 歲,工程師」。
Impl:
➔ 是「小明決定自己要騎腳踏車來」,小美則是「搭捷運來」。
(每個 struct 自己根據 trait 的規格,寫自己的邏輯)